// 云函数入口文件
const cloud = require('wx-server-sdk');

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
const db = cloud.database();
const usersCollection = db.collection('users');

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  const openid = wxContext.OPENID;

  if (!openid) {
    return {
      code: 500,
      msg: '获取用户OpenID失败'
    };
  }

  try {
    // 1. 使用 openid 查询用户是否已存在
    const userQueryResult = await usersCollection.where({
      _openid: openid
    }).limit(1).get();

    // 2. 判断是新用户还是老用户
    if (userQueryResult.data.length > 0) {
      const userInfo = userQueryResult.data[0];

      // 判断资料是否完整（已授权且有头像与昵称）
      const isProfileComplete = !!(userInfo.authorized && userInfo.nickName && userInfo.avatarUrl);

      if (!isProfileComplete) {
        console.log(`用户资料未完善，需补充: ${openid}`);
        return {
          code: 0,
          msg: '资料未完善，需授权补充',
          data: {
            isNewUser: true
          }
        };
      }

      // 资料完整：老用户直接登录，并更新最后登录时间
      await usersCollection.doc(userInfo._id).update({
        data: {
          lastLoginTime: new Date()
        }
      });

      console.log(`老用户登录: ${openid}`);
      return {
        code: 0,
        msg: '老用户登录成功',
        data: {
          isNewUser: false,
          userInfo: userInfo
        }
      };

    } else {
      // 新用户：创建基础用户记录
      const newUserRecord = {
        _openid: openid,
        nickName: '', // 待用户授权或生成默认值
        avatarUrl: '', // 待用户授权或生成默认值
        authorized: false, // 初始为未授权状态
        createTime: new Date(),
        lastLoginTime: new Date(),
        // 初始化统计数据
        points: 0,
        total_study_time: 0,
        study_streak: 0
      };
      
      await usersCollection.add({
        data: newUserRecord
      });

      console.log(`新用户注册: ${openid}`);
      return {
        code: 0,
        msg: '新用户，待授权',
        data: {
          isNewUser: true
        }
      };
    }
  } catch (error) {
    console.error(`登录云函数出错 for openid: ${openid}`, error);
    return {
      code: 500,
      msg: '服务器内部错误',
      error: error.message
    };
  }
};
